﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTVeterinariaServices.Dominio;
using System.Data.SqlClient;
using System.ServiceModel;

namespace RESTVeterinariaServices.Persistencia
{
    public class CitaDAO
    {
        public Cita Crear(Cita citaCrear)
        {
            Cita citaCreado = null;
            try
            {
                using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
                {
                    con.Open();
                    string query = "INSERT INTO Cita VALUES ((SELECT dbo.Cita_GetId()), @IdVeterinario, @IdPaciente,@IdEstado, GETDATE(), DATEADD(HOUR,-5,@FechaCita), @IdProducto, @Diagnositco)";
                    using (SqlCommand com = new SqlCommand(query, con))
                    {
                        com.Parameters.Add(new SqlParameter("@IdVeterinario", citaCrear.Veterinario.IdVeterinario));
                        com.Parameters.Add(new SqlParameter("@IdPaciente", citaCrear.Paciente.IdPaciente));
                        com.Parameters.Add(new SqlParameter("@IdEstado", citaCrear.EstadoCita.IdEstado));
                        com.Parameters.Add(new SqlParameter("@FechaCita", citaCrear.FechaCita));
                        com.Parameters.Add(new SqlParameter("@IdProducto", citaCrear.Producto.IdProducto));
                        com.Parameters.Add(new SqlParameter("@Diagnositco", (citaCrear.Diagnositco) == null ? string.Empty : citaCrear.Diagnositco));
                        com.ExecuteNonQuery();
                     }
                 }
                citaCreado = obtener(citaCrear.IdCita.ToString());
                return citaCreado;
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Cita obtener(string IdCita)
        {
            try
            {
            Cita CitaEncontrado = null;
            string sql = "EXEC Cita_GETbyId @IdCita";

            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@IdCita", IdCita));
                    using (SqlDataReader res = com.ExecuteReader())
                    {
                        if (res.Read())
                        {
                            Cliente c = new Cliente()
                            {
                                idCliente =(int)res["idCliente"]
                                ,txtClienteNombre=(string)res["txtClienteNombre"]
                                ,txtClienteApellido=(string)res["txtClienteApellido"]
                                ,NumDocumento=(string)res["NumDocumento"]
                            };
                            Paciente p = new Paciente()
                            {
                                IdPaciente = (int)res["IdPaciente"]
                                ,txtPaciente = (string)res["txtPaciente"]
                                ,Cliente = c
                            };
                            EstadoCita e = new EstadoCita
                            {
                                IdEstado = (int)res["IdEstado"]
                                ,txtEstado = (string)res["txtEstado"]
                            };
                            Producto pr = new Producto
                            {
                                IdProducto = (int)res["IdProducto"]
                                ,txtProducto = (string)res["txtProducto"]
                            };
                            Veterinario v = new Veterinario
                            {
                                IdVeterinario = (int)res["IdVeterinario"],
                                txtVeterinarioNombre = (string)res["txtVeterinarioNombre"],
                                txtVeterinarioApellidoP = (string)res["txtVeterinarioApellidoP"],
                                txtVeterinarioApellidoM = (string)res["txtVeterinarioApellidoM"],
                                numCVP = (string)res["numCVP"]

                            };
                            CitaEncontrado = new Cita()
                            {
                                 IdCita= (int)res["IdCita"]
                                  ,Veterinario = v
                                  ,Paciente  = p
                                  ,EstadoCita= e
                                  ,FechaRegistro= (DateTime)res["FechaRegistro"]
                                  ,FechaCita = (DateTime)res["FechaCita"]
                                  ,Producto= pr
                                  ,Diagnositco= (string)res["Diagnositco"]
                            };
                        }
                    }
                }
            }
            return CitaEncontrado;
             }

            catch (FaultException ex)
            {
                throw ex;
            }
        }

        public List<Cita> ListarTodos()
        {
            try
            {
            List<Cita> list = new List<Cita>();
            string sql = "exec Cita_GET";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader res = com.ExecuteReader())
                    {
                        while (res.Read())
                        {
                            Cliente c = new Cliente()
                            {
                                idCliente = (int)res["idCliente"],
                                txtClienteNombre = (string)res["txtClienteNombre"],
                                txtClienteApellido = (string)res["txtClienteApellido"],
                                NumDocumento = (string)res["NumDocumento"]};
                            Paciente p = new Paciente()
                            {
                                IdPaciente = (int)res["IdPaciente"],
                                txtPaciente = (string)res["txtPaciente"],
                                Cliente = c};
                            EstadoCita e = new EstadoCita
                            {
                                IdEstado = (int)res["IdEstado"],
                                txtEstado = (string)res["txtEstado"]};
                            Producto pr = new Producto
                            {
                                IdProducto = (int)res["IdProducto"],
                                txtProducto = (string)res["txtProducto"]};
                            Veterinario v = new Veterinario
                            {
                                IdVeterinario = (int)res["IdVeterinario"],
                                txtVeterinarioNombre = (string)res["txtVeterinarioNombre"],
                                txtVeterinarioApellidoP = (string)res["txtVeterinarioApellidoP"],
                                txtVeterinarioApellidoM = (string)res["txtVeterinarioApellidoM"],
                                numCVP = (string)res["numCVP"]

                            };
                            Cita Cita= new Cita()
                            {
                                IdCita = (int)res["IdCita"],
                                Veterinario = v,//veterinarioDAO.obtener((int)res["IdVeterinario"]),
                                Paciente = p,
                                EstadoCita = e,
                                FechaRegistro = (DateTime)res["FechaRegistro"],
                                FechaCita = (DateTime)res["FechaCita"],
                                Producto = pr,
                                Diagnositco = (string)res["Diagnositco"]
                            };
                            list.Add(Cita);
                        }
                    }
                }
            }
            return list;
            }

            catch (FaultException ex)
            {
                throw ex;
            }    
        }

        public Cita Modificar(Cita CitaAModificar)
        {
            Cita CitaModificado = null;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string sql = "UPDATE Cita SET ";
                sql = sql + "IdVeterinario  = @IdVeterinario ";
                sql = sql + ", IdPaciente  = @IdPaciente ";
                sql = sql + ", IdEstado  = @IdEstado ";
                sql = sql + ", FechaCita  = DATEADD(HOUR,-5,@FechaCita) ";
                sql = sql + ", IdProducto  = @IdProducto ";
                sql = sql + ", Diagnositco  = @Diagnositco ";
                sql = sql + "WHERE IdCita  = @IdCita";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@IdCita", CitaAModificar.IdCita));
                    com.Parameters.Add(new SqlParameter("@IdVeterinario", CitaAModificar.Veterinario.IdVeterinario));
                    com.Parameters.Add(new SqlParameter("@IdPaciente", CitaAModificar.Paciente.IdPaciente));
                    com.Parameters.Add(new SqlParameter("@IdEstado", CitaAModificar.EstadoCita.IdEstado));
                    com.Parameters.Add(new SqlParameter("@FechaCita", CitaAModificar.FechaCita));
                    com.Parameters.Add(new SqlParameter("@IdProducto", CitaAModificar.Producto.IdProducto));
                    com.Parameters.Add(new SqlParameter("@Diagnositco", (CitaAModificar.Diagnositco) == null ? string.Empty : CitaAModificar.Diagnositco));
                    com.ExecuteNonQuery();
                }
            }
            CitaModificado = obtener(CitaAModificar.IdCita.ToString ());
            return CitaModificado;
                
        }

        public void Eliminar(string IdCita)
        {
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string sql = "UPDATE Cita SET ";
                sql = sql + " IdEstado  = 5 ";
                sql = sql + "WHERE IdCita  = @IdCita";
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@IdCita", IdCita));
                    
                    com.ExecuteNonQuery();
                }
            }
        }
    }
}